package com.azdebugit.java8.jvm;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * @version:: design_pattern_and_otherutils
 * @description:
 * @create: 2021/12/10 1:09.
 */
public class TestMap {
    static Map<Object,Object> container = new HashMap<>();
    public static void putToContainer(Object key,Object value){
        container.put(key,value);
    }

    public static void main(String[] args) {
        //某个类中有这样一段代码
        /*Object key = new Object();
        Object value = new Object();*/
        for (int i = 0; i < 1000; i++) {
            Random random = new Random();
            String key = random.nextInt(1000)+"";
            long value = random.nextLong();
            putToContainer(key,value);
            System.out.println("----############-----=====>"+container.size());
            if(key.equals("56")){
                key = null;
                System.out.println("---------"+value);
                System.out.println("！！！！！！！！！！！！！！！"+container.get(key));
            }
//                System.out.println("----############-----=====>");
        }


        //..........
        /**
         * 若干调用层次后程序员发现这个key指向的对象没有用了，
         * 为了节省内存打算把这个对象抛弃，然而下面这个方式真的能把对象回收掉吗？
         * 由于container对象中包含了这个对象的引用,所以这个对象不能按照程序员的意向进行回收.
         * 并且由于在程序中的任何部分没有再出现这个键，所以，这个键 / 值 对无法从映射中删除。
         * 很可能会造成内存泄漏。
         */
//        key = null;
    }
}
